package com.suning.sawp.intf.dao.mainpushnew;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.suning.sawp.dto.maindiscode.MainDiscodeDto;
import com.suning.sawp.po.mainpushnew.AreaModelRel;
import com.suning.sawp.po.mainpushnew.AreaTask;
import com.suning.sawp.po.mainpushnew.HqTask;
import com.suning.sawp.po.mainpushnew.Model;
import com.suning.sawp.po.mainpushnew.ModelCmmdty;
import com.suning.sawp.po.store.StoreBaseInfo;
import com.suning.sawp.vo.mainpushnew.HqModelAllocateVo;
import com.suning.sawp.vo.mainpushnew.HqTaskVo;
import com.suning.sawp.vo.mainpushnew.TaskModelVo;

/**
 * 
 * 总部主推任务维护dao<br>
 *
 * @author 14060886 祝翔龙
 */
public interface MainPushTaskHqHandleDao {

	/**
	 * 分页查询总部主推任务
	 *
	 * @param paramsMap
	 * @return
	 */
	List<HqTask> queryPageHqTask(Map<String, Object> paramsMap);

	/**
	 * 按条件查询总部主推任务的总条数
	 *
	 * @param paramsMap
	 * @return
	 */
	int countPageHqTask(Map<String, Object> paramsMap);

	/**
	 * 
	 * 功能描述: 查询总部任务信息<br>
	 *
	 * @param hqTaskId
	 * @return
	 */
	HqTaskVo selectHqTaskInfoById(Long hqTaskId);

	/**
	 * 
	 * 功能描述: 查询款数信息以及款数商品关系数量<br>
	 *
	 * @param hqTaskId
	 * @return
	 */
	Integer countModelInfoByTask(Long hqTaskId);

	/**
	 * 
	 * 功能描述: 查询款数信息以及款数商品关系<br>
	 *
	 * @param hqTaskId
	 * @param pageParams
	 * @return
	 */
	List<TaskModelVo> selectModelInfoByTask(Long hqTaskId, Map<String, Integer> pageParams);

	/**
	 * 
	 * 功能描述: 查询总部款数分配详情<br>
	 *
	 * @param hqTaskId
	 * @param modelId
	 * @return
	 */
	List<HqModelAllocateVo> selectAreaAllocateDetailByModel(Long hqTaskId, Long modelId);

	/**
	 * 
	 * 功能描述: 更新大区目标台数<br>
	 * 
	 * @param item
	 */
	void updateModelTargetByArea(HqModelAllocateVo item);
	
	/**
     * 
     * 功能描述: 更新款数目标总台数<br>
     * 
     * @param modelId
     * @param hqTaskId
     * @param targetNum
     */
    void updateModelTargetByCode(Long modelId, Long hqTaskId, Integer targetNum);

	/**
	 * 
	 * 功能描述: 删除款数<br>
	 *
	 * @param hqTaskId
	 * @param modelId
	 */
	void deleteModeById(Long hqTaskId, Long modelId);

	/**
	 * 
	 * 功能描述: 删除商品款数关系<br>
	 *
	 * @param hqTaskId
	 * @param modelId
	 */
	void deleteModelCmmdtyRelById(Long hqTaskId, Long modelId);

	/**
	 * 
	 * 功能描述: 删除大区款数关系<br>
	 *
	 * @param hqTaskId
	 * @param modelId
	 */
	void deleteAreaModelRelById(Long hqTaskId, Long modelId);

	/**
	 * 
	 * 功能描述: 删除门店款数关系<br>
	 *
	 * @param hqTaskId
	 * @param modelId
	 */
	void deleteStoreModelRelById(Long hqTaskId, Long modelId);

	/**
	 * 
	 * 功能描述: 删除店员款数关系<br>
	 *
	 * @param hqTaskId
	 * @param modelId
	 */
	void deleteStaffModelRelById(Long hqTaskId, Long modelId);

	/**
	 * 根据ID查询主推任务信息
	 * 
	 * @param hqTaskId
	 */
	HqTask selectHqTaskById(String hqTaskId);

	/**
	 * 根据月份和品类编码查询总部任务
	 * 
	 * @param month
	 *            月份 eg:201701
	 * @param cateCode
	 *            品类编码
	 */
	HqTask findHqTaskByMonthAndCateCode(String month, String cateCode);

	/**
	 * 根据月份查询总部任务
	 *
	 * @param month
	 *            月份
	 */
	List<HqTask> queryHqTaskByMonth(String month);

	/**
	 * 
	 * 根据任务id 删除总部任务 需要同步删除一堆其余的子表数据的
	 * 
	 * @param id
	 */
	void deleteHqTaskById(Long id);

	/**
	 * 批量保存总部任务
	 *
	 * @param hqTasks
	 */
	void batchSaveHqTask(Map<String, Object>[] batchValues);

	/**
	 * 
	 * 功能描述: 保存款数<br>
	 *
	 * @param model
	 * @return
	 */
	Long insertModel(Model model);

	/**
	 * 
	 * 功能描述: 保存款数商品关系<br>
	 *
	 * @param modelCmmdty
	 * @return
	 */
	Integer insertModelCmmdty(ModelCmmdty modelCmmdty);

	/**
	 * 
	 * 批量保存商品款数关系
	 *
	 * @param batchValues
	 * @return
	 */
	Integer batchSaveModelCmmdtyRel(Map<String, Object>[] batchValues);

	/**
	 * 
	 * 功能描述: 查询大区是否存在<br>
	 *
	 * @param disCode
	 * @return
	 */
	Integer hasAreaByCode(String disCode);

	/**
	 * 
	 * 功能描述: 查询款数名称是否存在<br>
	 *
	 * @param modelName
	 * @param hqTaskId
	 * @return
	 */
	Integer hasModelaByName(Long hqTaskId, String modelName);

	/**
	 * 
	 * 功能描述: 查询大区总数量<br>
	 *
	 * @return
	 */
	Integer countArea();

	/**
	 * 
	 * 功能描述: 批量保存大区款数关系<br>
	 *
	 * @param rels
	 * @return
	 */
	void batchInsertAreaModelRel(List<AreaModelRel> rels);

	/**
	 * 
	 * 功能描述: 批量更新款数信息<br>
	 *
	 * @param models
	 */
	void batchUpdateModel(List<Model> models);

	/**
	 * 
	 * 功能描述: 修改主推任务占比<br>
	 *
	 * @param hqTaskId
	 * @param bigDecimal
	 */
	void updateTaskRateById(Long hqTaskId, BigDecimal rate);

	/**
	 * 查询所有大区
	 *
	 * @return
	 */
	List<MainDiscodeDto> queryAllArea();

	/**
	 * 根据月份查询所对应的所有款数
	 * 
	 * @param month
	 */
	List<Model> queryAllModelByMonth(String month);

	/**
	 * 批量保存大区任务
	 *
	 * @param batchValues
	 */
	void batchSaveAreaTask(Map<String, Object>[] batchValues);

	/**
	 * 批量保存大区款数关系数据
	 *
	 * @param batchValues
	 */
	void batchSaveAreaModelTask(Map<String, Object>[] batchValues);

	/**
	 * 
	 * 根据总部任务id查询所有的大区任务
	 *
	 * @param hqTaskId
	 * @return
	 */
	List<AreaTask> queryAreaTaskByHqTaskId(Long hqTaskId);

	/**
	 * 批量更新某款数的目标数量
	 *
	 * @param batchValues
	 */
	void updateModelTargetNum(Map<String, Object>[] batchValues);

	/**
	 * 
	 * 根据大区编码查询门店列表信息
	 *
	 * @param disCode
	 * @return
	 */
	List<StoreBaseInfo> queryStoreByDisCode(String disCode);

	/**
	 * 批量保存门店主推任务
	 *
	 * @param batchValues
	 */
	void batchSaveStoreTask(String batchValues);

	/**
	 * 更新总部任务状态为已完成
	 *
	 * @param hqTaskId
	 */
	void updateHqTaskStaus(Long hqTaskId);
}
